Compactando / descompactando arquivos simultaneamente [Melhorado]

Publicado por Sandro Marcell 18/07/2007

[ Hits: 6.434 ]

Homepage: http://sanmarcell.wordpress.com

Download descom.sh




Este script compacta/descompacta arquivos simultaneamente, sem necessidade de parâmetros extras.

Ex.: nome_script arq.txt arq.pdf arq.gz arq.tar.gz

Os arquivos arq.txt e arq.pdf serão compactados; já os arquivs arq.gz e arq.tar.gz serão descompactados.

Está é a versão Shell Bash de um script Tcl que postei aqui no VOL.

Falou!!!

  



Esconder código-fonte

#!/bin/bash
#
# Compacte/descompacte arquivos simultaneamente.
# (Versão Shell Bash)
#
# Autor: Sandro Marcell (sandro_marcell@yahoo.com.br)
#
# Uso: nome_script arquivo1 [arquivoN]
#
# Obs.:
# É possível o uso do metacaractere (*)
# São necessários os programas: tar, gzip e bzip2

# Realçando saída do comando 'echo':
Echo () { echo -e "\e[1m$*\e[m" ; }

# Checando parâmetros:
[ -z $BASH_ARGC ] && Echo "Uso: $(basename $0) arquivo1 [arquivoN]" && exit

# Simples avisos:
Aguarde () { Echo "Descompactando..." ; sleep 1 ; }
Aguarde2 () { Echo "Compactando..." ; sleep 1 ; }

# Arquivo de log:
LOG=/tmp/$(basename $0)-$USER.log

# Função que testa código de retorno:
Testando () {
   [ $? == 0 ] && Echo "Arquivo descompactado!" \
   || Echo "-> Erro! Mais detalhes em $LOG"
}

# Início do loop:
for A ; do

   # Testes condicionais:
   [ ! -e $A ] && Echo "-> Arquivo não encontrado." && continue
   [ ! -O $A ] && Echo "-> Acesso negado." && continue

   # Compactar ou descompactar?
   case $A in
      # Descompactando...
      *.tar.gz | *.tgz)
      Aguarde
      tar -zxf $A 2>> $LOG
      Testando $? 
      ;;
      
      *.gz)
      Aguarde
      gunzip $A 2>> $LOG
      Testando $?
      ;;
      
      *.tar.bz2 | *.tbz)
      Aguarde
      tar -jxf $A 2>> $LOG
      Testando $?
      ;;

      *.bz2)
      Aguarde
      bunzip2 $A 2>> $LOG
      Testando $?
      ;;

      *)
      # Compactando...
      [ -d $A ] && {
      Aguarde2
      tar -czf $A.tar.gz $A 2>> $LOG
      [ $? == 0 ] && Echo "Diretório compactado!" \
      || Echo "-> Erro! Mais detalhes em $LOG"
   } || {
   Aguarde2
   gzip -f9 $A 2>> $LOG
   [ $? == 0 ] && Echo "Arquivo compactado!" \
   || Echo "-> Erro! Mais detalhes em $LOG"
}
;;
esac
done
#Fim

Scripts recomendados

Testar se variável é numérica

substituir.sh

Criar senha para abrir determinado programa

Descompactar todos os .zip de um diretório

Script simples com interação com o usuário


  

Comentários
[1] Comentário enviado por xerxeslins em 22/11/2008 - 22:47h

Que maravilha, hein?!

Já está nos favoritos. Isso evita muita dor de cabeça.
Gostei muito do seu script.
Parabéns!

[2] Comentário enviado por vitinho217 em 24/06/2014 - 09:34h

Valeu cara, script show de bola !


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts